package com.itany.proxy;

import java.lang.reflect.Proxy;

/**
 * Author:石小俊
 * Date: 2022/11/4 11:43
 * 动态代理
 */
public class Test02 {

    public static void main(String[] args) {
        // static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
        // 通过JDK提供的Proxy对象获取代理对象
        // 该对象是在运行时确定的,因此不需要事先创建对应的代理对象
        // 该方法存在三个参数
        // loader:定义代理的类的类加载器
            // 对于代理类而言,其代理的是指定接口所实现的目标类
            // 此处即为目标类的类加载器
        // interfaces:代理的类要实现的接口列表
            // 代理类所代理的目标类所实现的接口列表
        // h:指派方法调用的调用处理程序
            // 代理方法的具体实现
        UserService userService = (UserService) Proxy.newProxyInstance(
                UserServiceImpl.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new UserServiceImpl()));
        userService.login("admin","123456");
        System.out.println("**************************************");
        userService.register("admin");

        System.out.println("**************************************");
        SomeService someService = (SomeService) Proxy.newProxyInstance(
                SomeServiceImpl.class.getClassLoader(),
                SomeServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new SomeServiceImpl()));
        someService.doSome();
        System.out.println("**************************************");
        someService.doOther();
    }

}
